package leetcode.string;

/**
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * <p>
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 * <p>
 * <p>
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-integer
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * 时间复杂度 O (logN) n =x  logN 即表示以是10为底的 x位数次幂 即循环x位数次就够了
 * 空间复杂度 O 1
 */
public class Solution7 {
    public int reverse(int x) {
        int res = 0;
        while (x != 0) {
            // res * 10 + x % 10 此时可能已经超过了Integer的最大范围, 所以不能使用 (res * 10 + x % 10) < Integer.MIN_VALUE || (res * 10 + x % 10) > Integer.MAX_VALUE
            // 需要使用 res < Integer.MIN_VALUE / 10 || res > Integer.MAX_VALUE / 10     +x % 10 可以不计
            if (res < Integer.MIN_VALUE / 10 || res > Integer.MAX_VALUE / 10) {
                return 0;
            }
            res = res * 10 + x % 10;
            x = x / 10;
        }
        return res;
    }

    public static void main(String[] args) {
        Solution7 solution7 = new Solution7();
        System.out.println(solution7.reverse(1534236469));
    }
}
